{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "3.6.8 (default, Oct  7 2019, 12:59:55) \n",
      "[GCC 8.3.0]\n"
     ]
    }
   ],
   "source": [
    "import sys\n",
    "print(sys.version)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "from scipy.optimize import minimize\n",
    "import warnings\n",
    "warnings.simplefilter(\"ignore\")\n",
    "from pymongo import MongoClient\n",
    "from pymongo import errors\n",
    "import time\n",
    "import os\n",
    "from tqdm.auto import tqdm\n",
    "from threading import Thread\n",
    "from multiprocessing import Process\n",
    "import datetime\n",
    "#import matplotlib.cm as cm\n",
    "from matplotlib import ticker, cm\n",
    "from matplotlib import mlab\n",
    "import matplotlib.pyplot as plt\n",
    "import matplotlib\n",
    "import seaborn as sns\n",
    "import pylab\n",
    "from matplotlib.pyplot import colorbar, pcolor, show\n",
    "from sklearn.linear_model import LinearRegression\n",
    "from sklearn.metrics import r2_score\n",
    "from sklearn.model_selection import train_test_split"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "from pydoc import help\n",
    "from scipy.stats.stats import pearsonr, spearmanr\n",
    "from sklearn.metrics import r2_score, mean_squared_error, mean_absolute_error\n",
    "import math"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "def sign_comparison(real_changes, evaluated_changes):\n",
    "    \n",
    "    real_changes = list(real_changes)\n",
    "    evaluated_changes = list(evaluated_changes)\n",
    "    \n",
    "    if len(real_changes) != len(evaluated_changes):\n",
    "        return -1\n",
    "    \n",
    "    counter = 0\n",
    "    \n",
    "    for i in range(len(real_changes)):\n",
    "        cond_1 = ((real_changes[i] > 0) and (evaluated_changes[i] > 0))\n",
    "        cond_2 = ((real_changes[i] < 0) and (evaluated_changes[i] < 0))\n",
    "        cond_3 = ((real_changes[i] == 0) and (evaluated_changes[i] == 0))\n",
    "        \n",
    "        if cond_1 or cond_2 or cond_3:\n",
    "            counter = counter + 1\n",
    "    \n",
    "    if len(real_changes) != 0:\n",
    "        return counter / len(real_changes)\n",
    "    \n",
    "    else:\n",
    "        return None\n",
    "    \n",
    "def get_score_by_absolute_value(t_1, t_2, tresholds, error):\n",
    "    \n",
    "    p_1 = '$p_{i}(t_{' + str(t_1) + '})$'\n",
    "    p_2 = '$p_{i}(t_{' + str(t_2) + '})$'\n",
    "    friends = '$p_{-i}(t_{' + str(t_1) + '})$'\n",
    "\n",
    "    opinion_change = data[p_2] - data[p_1]\n",
    "    data_sample = data[(abs(opinion_change) > tresholds[0]) & (abs(opinion_change) <= tresholds[1])]\n",
    "\n",
    "    opinion_change = data_sample[p_2] - data_sample[p_1]\n",
    "    self_weight = 1 / (data_sample['fr_number'] + 1)\n",
    "    evaluated_opinion_change = data_sample[p_1] * self_weight + data_sample[friends] * (1 - self_weight) - data_sample[p_1]\n",
    "\n",
    "    if error == 'sign_accuracy':\n",
    "        score = sign_comparison(opinion_change, evaluated_opinion_change)\n",
    "        \n",
    "    elif error == 'MAE':\n",
    "        \n",
    "        if opinion_change.shape[0] > 0:\n",
    "            score = mean_absolute_error(opinion_change, evaluated_opinion_change)\n",
    "            \n",
    "        else:\n",
    "            score = None\n",
    "\n",
    "    return score \n",
    "\n",
    "def SA_MAE_magnitude(error, labelsize):\n",
    "    \n",
    "    treshold_values = list(np.array(range(41))/40)\n",
    "    results = np.zeros((2, len(treshold_values)))\n",
    "    results[0, 0] = get_score_by_absolute_value(1, 2, (-1, 0), error)\n",
    "    results[1, 0] = get_score_by_absolute_value(2, 3, (-1, 0), error)\n",
    "\n",
    "    for i in tqdm(range(1, len(treshold_values))):\n",
    "        results[0, i] = get_score_by_absolute_value(1, 2, (treshold_values[i-1], treshold_values[i]), error)\n",
    "        results[1, i] = get_score_by_absolute_value(2, 3, (treshold_values[i-1], treshold_values[i]), error)\n",
    "        \n",
    "        \n",
    "    plt.figure(figsize=(5, 5))\n",
    "    plt.rcParams['xtick.labelsize'] = labelsize\n",
    "    plt.rcParams['ytick.labelsize'] = labelsize\n",
    "    plt.plot(treshold_values, results[0, :], color='k', linestyle='--', marker='^', label = '$D_{m}^{1}$')\n",
    "    plt.plot(treshold_values, results[1, :], color='grey', linestyle='-.', marker='o', label = '$D_{m}^{2}$')\n",
    "    plt.xlabel(\"$x_{m}$\", fontsize = labelsize)\n",
    "\n",
    "    if error == 'sign_accuracy':\n",
    "        plt.ylabel('SA', fontsize = labelsize)\n",
    "\n",
    "    elif error == 'MAE':\n",
    "        plt.ylabel('MAE', fontsize = labelsize)\n",
    "    \n",
    "    plt.legend(loc='lower right', fontsize = labelsize)\n",
    "    plt.show()   \n",
    "    \n",
    "    return 0\n",
    "\n",
    "def get_score_by_valid_fr_number(t_1, t_2, tresholds, threshold_value):\n",
    "\n",
    "    p_1 = '$p_{i}(t_{' + str(t_1) + '})$'\n",
    "    p_2 = '$p_{i}(t_{' + str(t_2) + '})$'\n",
    "    friends = '$p_{-i}(t_{' + str(t_1) + '})$'\n",
    "    opinion_change = data[p_2] - data[p_1]\n",
    "    data_sample = data[abs(opinion_change) > threshold_value]\n",
    "    cond_1 = data_sample['fr_number'] >= tresholds[0]\n",
    "    cond_2 = data_sample['fr_number'] < tresholds[1]\n",
    "    data_sample = data_sample[cond_1 & cond_2]\n",
    "\n",
    "    opinion_change = data_sample[p_2] - data_sample[p_1]\n",
    "    self_weight = 1 / (data_sample['fr_number'] + 1)\n",
    "    evaluated_opinion_change = data_sample[p_1] * self_weight + data_sample[friends] * (1 - self_weight) - data_sample[p_1]\n",
    "\n",
    "    score = sign_comparison(opinion_change, evaluated_opinion_change)\n",
    "\n",
    "    return score\n",
    "\n",
    "def SA_valid_fr_number(threshold_value, max_number_of_friends, step):\n",
    "    \n",
    "    treshold_values = list(np.array(range(1, max_number_of_friends, step)))\n",
    "    treshold_values.append(max_number_of_friends + 1)\n",
    "    results = np.zeros((2, len(treshold_values)-1))\n",
    "\n",
    "    for i in tqdm(range(len(treshold_values)-1)):\n",
    "        results[0, i] = get_score_by_valid_fr_number(1, 2, (treshold_values[i], treshold_values[i+1]), threshold_value)\n",
    "        results[1, i] = get_score_by_valid_fr_number(2, 3, (treshold_values[i], treshold_values[i+1]), threshold_value)\n",
    "        \n",
    "    plt.figure(figsize=(5, 5))\n",
    "    labelsize = 10\n",
    "    plt.rcParams['xtick.labelsize'] = labelsize\n",
    "    plt.rcParams['ytick.labelsize'] = labelsize\n",
    "    plt.plot(treshold_values[:-1], results[0, :], color='k', label = 'First Iteration')\n",
    "    plt.plot(treshold_values[:-1], results[1, :], color='grey', label = 'Second Iteration')\n",
    "    plt.xlabel(\"Number of Friends\", fontsize = labelsize)\n",
    "    plt.ylabel(\"SA\", fontsize = labelsize)\n",
    "    plt.legend(loc='lower right', fontsize = labelsize)\n",
    "    plt.show()   \n",
    "    \n",
    "    return 0"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Download Data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "1660927\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>$p_{i}(t_{1})$</th>\n",
       "      <th>$p_{i}(t_{2})$</th>\n",
       "      <th>$p_{i}(t_{3})$</th>\n",
       "      <th>fr_number</th>\n",
       "      <th>$p_{-i}(t_{1})$</th>\n",
       "      <th>$p_{-i}(t_{2})$</th>\n",
       "      <th>$p_{-i}(t_{3})$</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.514611</td>\n",
       "      <td>0.514624</td>\n",
       "      <td>0.512251</td>\n",
       "      <td>7.0</td>\n",
       "      <td>0.410485</td>\n",
       "      <td>0.467247</td>\n",
       "      <td>0.457429</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.186235</td>\n",
       "      <td>0.186235</td>\n",
       "      <td>0.186192</td>\n",
       "      <td>7.0</td>\n",
       "      <td>0.544541</td>\n",
       "      <td>0.576840</td>\n",
       "      <td>0.577952</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.604282</td>\n",
       "      <td>0.603247</td>\n",
       "      <td>0.603549</td>\n",
       "      <td>6.0</td>\n",
       "      <td>0.333697</td>\n",
       "      <td>0.308934</td>\n",
       "      <td>0.286581</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0.608380</td>\n",
       "      <td>0.614673</td>\n",
       "      <td>0.637561</td>\n",
       "      <td>3.0</td>\n",
       "      <td>0.410863</td>\n",
       "      <td>0.413971</td>\n",
       "      <td>0.413348</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0.729980</td>\n",
       "      <td>0.722895</td>\n",
       "      <td>0.726959</td>\n",
       "      <td>3.0</td>\n",
       "      <td>0.605165</td>\n",
       "      <td>0.616444</td>\n",
       "      <td>0.614579</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   $p_{i}(t_{1})$  $p_{i}(t_{2})$  $p_{i}(t_{3})$  fr_number  $p_{-i}(t_{1})$  \\\n",
       "0        0.514611        0.514624        0.512251        7.0         0.410485   \n",
       "1        0.186235        0.186235        0.186192        7.0         0.544541   \n",
       "2        0.604282        0.603247        0.603549        6.0         0.333697   \n",
       "3        0.608380        0.614673        0.637561        3.0         0.410863   \n",
       "4        0.729980        0.722895        0.726959        3.0         0.605165   \n",
       "\n",
       "   $p_{-i}(t_{2})$  $p_{-i}(t_{3})$  \n",
       "0         0.467247         0.457429  \n",
       "1         0.576840         0.577952  \n",
       "2         0.308934         0.286581  \n",
       "3         0.413971         0.413348  \n",
       "4         0.616444         0.614579  "
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data = pd.read_csv('X_opinions.csv')\n",
    "\n",
    "data.drop(['Unnamed: 0'], axis=1, inplace=True)\n",
    "\n",
    "print(data.shape[0])\n",
    "\n",
    "data.head(5)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Sign Accuracy as a function of magnitude"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "9957c8f2ac8c4287b7e79d069e313ada",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(IntProgress(value=0, max=40), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "image/png": "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USqF9yE9FouFSy65hJ49e7qeN5aXl/tsea1fv95tmbfB6CUlJWzfvp3jx4+7DTs6cOAAUNnqfOGFF1y97BEREc1q/TUluTbW8OHDsVgs7N27123dAw88wOzZs1vsXP6miVIp4IorrnBLUhUVFaSmppKYmEhBQYFrvcPh8NmqrK+FWte6devYv38/xhi39fv37yciIoKIiAjS09Ndjwda+pmiP1x00UWcOHGCsWPH1lr+/fffU1paGqComkYTpQp7IkJeXh5lZWXYbDZEhJMnT7J06VK6devWpOd59ZUJqys7O9tV4aa6h7tahw4dGDhwIM8++6zfnyn6g6eCFC+88ALdunVzDU0KBjo8SIW93Nxcjh49ymeffcaWLVtcy2NiYkhLS2v087yDBw/y8ccfc/311xMTE1NrH08lv7Kzs+nZsyddunRxO88111wDwIwZM/z+TNEfvvrqK6ZMmcIHH3xAv379gMqOnEGDBgXN80nQFqUKc6WlpaxYsYLjx4/XSpLw70Tk6XneF198QefOnTl79mytfcrKyrjzzjv56quvyMzM5OTJk64WamZmpqsARrWKigqKi4u5/vrr+dWvfkVKyr9nInA4HK7b/dZ4pugP3bp1Y8eOHa5hQqWlpWzcuDFohgW5ePrlt+WfIUOGiFItJSMjQ6ZPny6HDx9u1H7Lly8XQB555JFayydPniyALFmypNbyTz75pN5zOBwO1+eKigoREcnOzpbnnntOysrKGhVbW1JRUSHnnXeeTJw4UUREVq5cKYAsXbo0wJG5A3LES97RFqUKWdXVdLx1eBQWFrJ582auvPJKli1bxv/93/81+NijRo3iwQcfZObMmXz44YeMGDGC559/ntdee40nnniCO+64o9b2t9xyC+edd57XYhpRUVEcP36c2bNnk5+fD8AFF1zA0KFDa92+BxtjDMOHD2f16tWICKtXr8YY46owFDS8ZdC2+qMtStVQDz74oERERMhDDz3kts7pdMqrr74qL7zwgpw9e1b69u0ro0aNatTxT506JUlJSZKQkCARERFy3nnnyejRo6W8vNzj9vv27ZOrr75ali9f7lp2zz33yG9+8xsREbHb7bJo0SLZt29fo+Jo6/72t78JIAUFBZKXlyevv/56oEPyiHpalAFPfI390USpGuLQoUMSGxsrgMTFxUlRUZGIiGzbtk1mzpwp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\n",
      "text/plain": [
       "<Figure size 360x360 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "0"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "SA_MAE_magnitude('sign_accuracy', 10)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### MAE as a function of magnitude"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "0031e63f53c54bdba120992ba94e1e2c",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(IntProgress(value=0, max=40), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 360x360 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "0"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "SA_MAE_magnitude('MAE', 10)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Sign Accuracy as a fucntion of the number of friends"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "9ab0317b5533445d94d3ab9719c3b464",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(IntProgress(value=0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "image/png": "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pqmpidraWsaPH89tt93G5MmTAfjd735HIBDgkksuYf78+YwdO5YLL7yQESNG8NprrwGphRLCfTmnTJlCc3NzlFDa36+jt15sTP8o6DpK7eSAuGGMTo6yv78/bj3xfDhKe2f4TKK3E06O8thjj8Xn8yUVymSOUpfFjSGMYKJ3LPrvV4jPd3UVxlLD7/fzuc99jg8//JBJkyahlOK///u/2bRpEwsWLMDv97N+/Xp6enp47733ePzxx7nssstYsGAB99xzDw8++KAllJs2baKuro5nn32Wn//855YIbd26FYAvfelLlhCddVZ4ockZM2u44BYAACAASURBVGbECaXX6+Wuu+6y4rnmySef5LjjjmPhwoVRLuPKK6/k+eef5x/+4R+sdWyS0djYSENDA/X19Rw6dCipUOrp2/SyD9pRZiKUI0eOpL+/P65BJJXQiEja0dup1VuXxUkonRxHX1+f1Wim0X0pnboIpdOYo8uS7+5BxRakROiyFlso+/r6Ev4g5osh4yi3bdvGfffdx549e3j88ce59NJLCQaDvPjii4wbN46pU6eydu1aLr74Yu644w7Gjx/P1VdfjYjwn//5n7S2trJq1So6Ojr4+OOP+fjjj9m/fz81NTVcffXVnH/++fT09PDpT38apRQ33nhjXBlmz54dFb0DgQA7d+7kzTffjJq1JhAIsGrVKq688sq4KHbdddexd+9epk2bZnVkT0V/fz+9vb309vYmFcpQKERPT481CXC6Qmlv9daOMlYckgmlnl4s1oXaySV6JxJKJ9GbOHFiURxlOtG71Byl7nZVzDVzIP1103NhyAjlihUrqKys5Pbbb2fixIm0tbVx+eWXc/jwYV588UXuuusuXn31VRYtWsRHH31kuTyAuXPn8tOf/pQ//vGPAPz2t78F4JFHHuGqq66ioaGBE088kfHjx1NTU8OwYcMcf+Fmz57Nvn37+OMf/8ill15KTU0NU6ZMYcGCBdx7773Wfq+//jqBQIBFixbFHWPhwoU0Nzfz1FNPpXXera2t7N692xrvnUgo7WPIx4wZA4QFNlNH2dTURCgUylgo7fs4EduYk0n0drqRnboHQeK+lKUQvUvNUUJxRw1luhxwLgwJoVRK0dXVxf79+6mvr+d3v/sdPp+Pk046KWq/xsZGVqxYwapVq7jrrruiXrv11lv5zne+Q19fH4cP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f/nLX/I6M1DsTEaZTi2XT8wQRoPrGEeZeJt+nsgpvvHGGzz33HOsXbuWjz76iD179jB+/HiXSp0br776KiNHjsxovslgMJhwsTQtlNdffz0A8+bNY948x26OrjO0rl5DURiKQulENnWU+/btY9SoUdbY55EjR1rr8KxZs4YFCxZwyimnsGjRIvbt2wfAzp07+fSnP83s2bOZO3cuu3btympKsxdffJFp06Yxd+5cfvOb3yQt5969e/nZz37GAw88wJw5c3j11Vc5dOgQV111FfPnz2f+/Pm8/vrrQPy0cLt37+acc85h7ty5zJ0713KlsVO+2V1tW1sbl19+ObNmzeL0009n48aN1rFvvfVWFi5cyPHHH+84Z2c2uOooReRi4EHAC/xUKXV/zOtVwC+BU4BW4K+VUrvdLJOh8AyW6P3iiy+yf//+tPZVStHX1xd17kopuru7WbdunbUC4DHHHMPJJ5+c8DgXXXQR9957L1OnTmX+/PlccMEFzJ49m76+Pu68806effZZRo8ezZNPPsnXvvY1fv7zn3PDDTewdOlSrrjiCgKBAKFQKOMpzebNm8ff//3f86c//YkTTjiBv/7rv056vsceeyy33norTU1N/Mu//AsQnpzjn//5nzn77LP56KOPWLRoEdu2bQOip4Xz+/38/ve/p7q6mh07drBkyRJWr14dN+XbK6+8Yn3eN77xDU4++WSWL1/On/70J26++WZrKrd3332Xl19+ma6uLk488US+8IUvxK24mCmuCaWIeIEfAhcCe4B3RGSFUmqrbbe/BQ4rpU4QkeuA/wsk/4sYyg7jKKNxcpSJond9fT1r1qzh1Vdf5ZlnnuFf//Vf8Xg8zJs3j82bN3PhhRcC4fkvx44dS1dXF5988glXXHEFgDWkMNMpzerr65k8ebI1RduNN95oTcabLn/4wx/YunXgdtcrU0L0tHB9fX3ccccdrF+/Hq/Xy3vvvZfy2K+99hrPPPMMAOeffz6tra10dnYCcOmll1JVVUVVVRXNzc0cOHDAOr9scdNRngrsVEq9DyAivwIuA+xCeRlwT+Tx08APRETUYG4+G4IMFqG8+OKL0963r6+PQ4cOMWLECEsQ+vv7WbduHePGjYua/CGVS/V6vSxcuJDx48czadIknnnmGWsm8TfeeCNq33RmCIrFrSnNQqEQb775puP4b/tY9wceeIAxY8awYcMGQqFQzuPF3TgfN6/e44CPbc/3RLY57qOUCgIdQNzMACJym4isFpHVepJQQ/nQ2NhIQ0NDsYtRUPI1Mmf79u3s2LEDCE9XtmPHDiZOnMiJJ57IoUOHLKHs6+tjy5YtNDQ0MG7cOJYvXw7A0aNH8fv9GU9pNm3aNHbv3s2uXbsAeOKJJ1KWta6uLkqoL7roIr7//e9bzxPNrt7R0cHYsWPxeDw8+uij9Pf3A/FTvtk555xzeOyxx4BwJB81ahSNjY0py5gtZfEzr5RappSap5SaN3r06GIXx5AhF1xwATfeeGOxi1FQvF4vo0aNinJHIsL06dMZNWpU1L5NTU3WOjKxdHd3c8sttzBjxgw++9nPcuDAAe655x4qKyt5+umn+cpXvsLs2bOZM2eO1Qjy6KOP8r3vfY9Zs2Zx5plnsn///oynNKuurmbZsmVceumlzJ07l+bm5qTnOn36dK666ip++9vfWo053/ve91i9ejWzZs1ixowZ/OQnP3F8/z/+4z/yyCOPMHv2bN59913LbcZO+WbnnnvuYc2aNcyaNYulS5fyyCOPJCxfPnBtmjUROQO4Rym1KPL8qwBKqW/Z9nkpss8bIuID9gOjk0VvM82aoZBkO82aobQppWnW3gGmiMhkEakErgNWxOyzArgl8vhq4E+mftJgMJQarjXmKKWCInIH8BLh7kE/V0ptEZF7gdVKqRXAz4BHRWQn0EZYTA0Gg6GkcLUfpVJqJbAyZtvXbY8DwDVulsFgMBhypSwacwyGYmJqgwYX2fw9jVAaDEmorq6mtbXViOUgQSlFa2trxn01zaQYBkMSxo0bx549ezD9dwcP1dXVGY/UMUJpMCShoqKCyZMnF7sYhiJjorfBYDCkwAilwWAwpMAIpcFgMKTAtSGMbiEih4APM3jLKKDFpeIUmsF0LjC4zsecS2mSyblMVEo5TiZRdkKZKSKyOtH4zXJjMJ0LDK7zMedSmuTrXEz0NhgMhhQYoTQYDIYUDAWhzGz++tJmMJ0LDK7zMedSmuTlXAZ9HaXBYDDkylBwlAaDwZATg1ooReRiEdkuIjtFZGmxy5MKEfm5iBwUkc22bSNF5PcisiPy/4jIdhGR70XObaOIzC1eyeMRkfEi8rKIbBWRLSJyV2R72Z2PiFSLyNsisiFyLv87sn2yiLwVKfOTkQmqEZGqyPOdkdcnFbP8ToiIV0TWichzkeflfC67RWSTiKwXkdWRbXm9zgatUNqWy/0MMANYIiIziluqlDwMxC71txT4o1JqCvDHyHMIn9eUyL/bgB8XqIzpEgS+rJSaAZwO/FPk+y/H8zkKnK+Umg3MAS4WkdMJL6/8gFLqBOAw4eWXwbYMM/BAZL9S4y5gm+15OZ8LwHlKqTm2rkD5vc6UUoPyH3AG8JLt+VeBrxa7XGmUexKw2fZ8OzA28ngssD3y+CFgidN+pfgPeJbwGu9lfT5ALbAWOI1wR2Zf7PVGeFb/MyKPfZH9pNhlt53DuIh4nA88B0i5nkukXLuBUTHb8nqdDVpHSXrL5ZYDY5RS+yKP9wNjIo/L5vwice1k4C3K9HwiUXU9cBD4PbALaFfhZZYhurxpLcNcRL4L/CsQijxvonzPBUABq0RkjYjcFtmW1+vMTLNWRiillIiUVTcFEakHngG+pJTq1GtbQ3mdj1KqH5gjIsOB3wLTilykrBCRzwIHlVJrRGRhscuTJ85WSn0iIs3A70XkXfuL+bjOBrOj/AQYb3s+LrKt3DggImMBIv8fjGwv+fMTkQrCIvmYUuo3kc1lez4ASql24GXC8XR4ZJlliC6vdS6R14cBrQUuaiLOAhaLyG7gV4Tj94OU57kAoJT6JPL/QcI/YqeS5+tsMAtlOsvllgP2JX1vIVzXp7ffHGnFOx3osEWNoiNh6/gzYJtS6j9tL5Xd+YjI6IiTRERqCNe1biMsmFdHdos9l5Jchlkp9VWl1Dil1CTC98SflFI3UIbnAiAidSLSoB8DFwGbyfd1VuyKWJcreS8B3iNcn/S1YpcnjfI+AewD+gjXnfwt4fqgPwI7gD8AIyP7CuFW/V3AJmBescsfcy5nE6472gisj/y7pBzPB5gFrIucy2bg65HtxwNvAzuBXwNVke3Vkec7I68fX+xzSHBeC4HnyvlcIuXeEPm3Rd/n+b7OzMgcg8FgSMFgjt4Gg8GQF4xQGgwGQwqMUBoMBkMKjFAaDAZDCoxQGgwGQwqMUBrSQkSUiHzH9vxfROSePB37YRG5OvWeOX/ONSKyTURejtk+SUR6IrPP6H+VDu+fJyLfy1NZPi8iP8jHsQzuY4YwGtLlKHCliHxLKVUyK/SJiE8NjFFOxd8Cf6+Ues3htV1KqTkpPmc1sDqbchrKG+MoDekSJDyt/j/HvhDrCEWkO/L/QhH5s4g8KyLvi8j9InKDhOd23CQin7Id5tMislpE3ouMR9YTUfw/EXknMnfg7bbjvioiK4CtDuVZEjn+ZhH5v5FtXyfcCf5nIvL/0jlhEblHRB4VkdeBRyOfq+dvrJPw/KFvS3hex8si2z8vIr8RkRclPBfit23H+5vI+b1NeCih3n5NpKwbROQv6ZTNUFiMozRkwg+BjfabPw1mA9OBNuB94KdKqVMlPJHvncCXIvtNIjxG91PAyyJyAnAz4SFm80WkCnhdRFZF9p8LzFRKfWD/MBE5lvCciacQnldxlYhcrpS6V0TOB/4l4gxj+ZSEZwcCeF0p9U+RxzMIT7rQEzOJxNcID+e7NTK88W0R+UPktTmEZ0s6CmwXke8T/qH535FydRAeMrgusv/XgUUqPLHD8BTfp6EIGKE0pI0Kz/7zS+CLQE+ab3tHRcbSisguQAvdJuA8235PKaVCwA4ReZ/w7DwXAbNsbnUY4QlXe4G3Y0UywnzgFaXUochnPgacCyxPUc5E0XuFUsrpXC8iPLnEv0SeVwMTIo//qJTqiHz+VmAiMCqmXE8CUyP7vw48LCJPAXryEEMJYYTSkCnfJTxx7S9s24JEqnFExAPYG0KO2h6HbM9DRF9/sWNpFeFxuXcqpV6yvxBxdkeyK37GJPocAa5SSm2P2ihyGtHn3E+K+0wp9Q+R910KrBGRU5RSJTVDz1DH1FEaMkIp1QY8xcBSARCeYfqUyOPFQEUWh75GRDyResvjCc88/RLwBQlP14aITI3MEJOMt4EFIjJKwsuBLAH+nEV5UvEScGdkliRE5OQU+78VKVdT5Hyu0S+IyKeUUm8ppb4OHCJ6GjBDCWAcpSEbvgPcYXv+X8CzIrIBeJHs3N5HhEWuEfgHpVRARH5KuO5ybUSQDgGXJzuI+v/bu0MbBIIgDKP/FkM3VxQJkmoQJwkSTwNI7HUwiD0sk6AQ7/lNVn2ZNbNVrzE/krtlTn1rVV2+nfnRKXO6fuxT9DPJ0tzrmOSeZMvcpvRxHmMc9vteMzfh8EdsDwJoeHoDNIQSoCGUAA2hBGgIJUBDKAEaQgnQEEqAxhsNRl6QAhdvjAAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 360x360 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "0"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "treshold_value = 0.1\n",
    "\n",
    "max_number_of_friends = 500\n",
    "\n",
    "step = 5\n",
    "\n",
    "SA_valid_fr_number(treshold_value, max_number_of_friends, step)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.8"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
